package tothreedesignmodel.template;

/**
 * 模板方式模式 *
 * 一个抽象类公开定义了执行它的方法的方式/模板。
 * 它的子类可以按需要重写方法实现，
 * 但调用将以抽象类中定义的方式进行
 *
 * SpringBoot为用户封装了很多继承代码，都用到了模板方式，
 * 例如那一堆XXXtemplate
 *
 * @Author lzhphantom
 * @Description
 * @Date 创建于 18:14 2020/7/16
 * @Modified
 */
public abstract class AbstractClass {
    /**
     * open
     *
     * @param
     * @return void
     * @description
     * @method open
     * @author lzhphantom
     * @date 18:15 2020/7/16
     */
    abstract void open();

    /**
     * close
     *
     * @return void
     * @description
     * @method close
     * @author lzhphantom
     * @date 18:15 2020/7/16
     */
    abstract void close();

    public void specificMethod(){
        System.out.println("specific");
    }

    public final void templateMethod() {
        open();
        specificMethod();
        close();
    }
}
